﻿using System;
using System.Linq;
using System.Text;
using Spring.Data.Core;
using System.Collections;
using System.Data;
using Spring.Data;
using Spring.Data.Common;
using GestionadorBaseDatos;
using CRUD.InterfaceDAO;
namespace CRUD.DAO
{
    /// <summary>
    /// Clase encargada de interactuar con la tabla MANTENIMIENTO_USUARIO del modelo
    /// </summary>
    public class MantenimientoUsuarioDao : AdoDaoSupport, IDaoMantenimientoUsuario
    {
        #region Querys para metodos


        private string SQL = @"select idMantenimientoUsuario, fecha, descripcion, nicknameFk from mantenimiento_usuario where idMantenimientoUsuario = @idMantenimientoUsuario";
        private string sqlGetAll = "select idMantenimientoUsuario, fecha, descripcion, nicknameFk from mantenimiento_usuario";
        private string sqlInsert = "INSERT INTO mantenimiento_usuario (fecha, descripcion, nicknameFk ) VALUES (@fecha,@descripcion,@nicknameFk)";
        private string sqlMantenimientosUsuariosByUsuario = "select m.idMantenimientoUsuario, m.fecha, m.descripcion, m.nicknameFk from mantenimiento_usuario m, usuario u" + " " +
                                                            "where u.nickname = @nickname and m.nicknameFk = u.nickname";

        # endregion

        # region metodos

        public IList GetMantenimientosUsuarioByUsuario(Usuario usuario)
        {
            IDbParameters dbParameters = AdoTemplate.CreateDbParameters();

            dbParameters.Add("@nickname", MySql.Data.MySqlClient.MySqlDbType.String, 50).Value = usuario.Nickname;

            return (IList)AdoTemplate.QueryWithRowMapper(CommandType.Text, sqlMantenimientosUsuariosByUsuario, new MantenimientoUsuarioRowMapper(), dbParameters);

        }

        public virtual IList GetAll()
        {
            System.Collections.IList lista = AdoTemplate.QueryWithRowMapperDelegate(CommandType.Text, sqlGetAll,
                        delegate(IDataReader iDataReader, int rowNum)
                        {
                            MantenimientoUsuario mantenimientoUsuario = new MantenimientoUsuario();
                            mantenimientoUsuario.IdMantenimientoUsuario = iDataReader.GetInt32(0);
                            mantenimientoUsuario.Fecha = iDataReader.GetDateTime(1);
                            mantenimientoUsuario.Descripcion = iDataReader.GetString(2);
                            Usuario usuarioAsociar = new Usuario();
                            usuarioAsociar.Nickname = iDataReader.GetString(3);
                            mantenimientoUsuario.UsuarioMantenimiento = usuarioAsociar;
                            return mantenimientoUsuario;
                        });

            return lista;
        }

        public void Insert(MantenimientoUsuario crear)//string tipo, string descripcion)
        {

            IDbParameters dbParameters = AdoTemplate.CreateDbParameters();

            dbParameters.Add("@fecha", MySql.Data.MySqlClient.MySqlDbType.DateTime, 50).Value = crear.Fecha;
            dbParameters.Add("@descripcion", MySql.Data.MySqlClient.MySqlDbType.LongText, 50).Value = crear.Descripcion;
            dbParameters.Add("@nicknameFk", MySql.Data.MySqlClient.MySqlDbType.String, 50).Value = crear.UsuarioMantenimiento.Nickname;

            AdoTemplate.ExecuteNonQuery(CommandType.Text, sqlInsert, dbParameters);


        }

        # endregion
    }
}
